package net.zoneland.knowledge.enums;

/**
 * 分任务的状态（环节）.
 */
public enum WorkSubTaskNodeEnum {
    /**
     * 刚从上级下发下来、办理状态.
     * <p>待办在当前人</p>
     */
    WAITING_FOR_HANDLE("办理", ProcessStateEnum.TODO),//

    /**
     * 上报后，等待上级确认.
     * <p>待办在上级</p>
     */
    SUPERIOR_CONFIRM("已上报", ProcessStateEnum.TODO),

    /**
     * 被上级退回要求修改.
     * <p>待办在当前人</p>
     */
    REJECT("退回修改", ProcessStateEnum.TODO),//

    /**
     * 已经下发下去，要求下级填写.
     * <p>挂起状态，无需处理，等待下级上报</p>
     */
    ISSUED("已下发", ProcessStateEnum.SUSPEND),

    /**
     * 下发后，下级已经上报时的状态.
     * <p>待办在当前人</p>
     * <p>特别注意的是，如果下发下去后，只要有1个子分任务报上来了，那么当前分任务就是确认状态，中间过程不管怎么变化（有确认、有退回）都保持确认状态，直到所有子分任务都确认了，才转成上报状态</p>
     * JIRA ZJYDDJJQR-516: “确认”状态对用户来说造成误解，改成“办理”
     */
    WAITING_FOR_CONFIRM("办理", ProcessStateEnum.TODO),

    /**
     * 下发后，所有下级已经上报，具备继续上报的条件的状态.
     * <p>待办在当前人</p>
     */
    WAITING_FOR_REPORT("上报", ProcessStateEnum.TODO),

    /**
     * 发起人报结.
     */
    TERMINATE("报结", ProcessStateEnum.SUSPEND),

    /**
     * 已完成，表示已经填写、并上报、得到确认.
     * <p>还有一种情况是：对顶层工单而言，下级分任务都确认了，对于顶层工单的分任务而言就完成了</p>
     * <p>无待办、也无挂起，此分任务彻底结束</p>
     */
    FINISH("已完成", ProcessStateEnum.FINISH);

    /**
     * 环节名称.
     */
    private final String nodeName;

    /**
     * 流程状态
     */
    private final ProcessStateEnum stateValue;

    WorkSubTaskNodeEnum(final String nodeName, ProcessStateEnum stateValue) {
        this.nodeName = nodeName;
        this.stateValue = stateValue;
    }

    public String getNodeName() {
        return nodeName;
    }

    public ProcessStateEnum getStateValue() {
        return stateValue;
    }}
